import re
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pyquery import PyQuery as pq
from config import *
import pymongo

client=pymongo.MongoClient(MONGO_URL)
db=client[MONGO_DB]


driver = webdriver.PhantomJS(service_args=SERVICE_ARGS)  #无界面浏览器
wait = WebDriverWait(driver, 10)

driver.set_window_size(1400,900)


def search():
    print('正在搜索')
    driver.get('http://pic.netbian.com/')
    # 文档地址https://python-selenium-zh.readthedocs.io/zh_CN/latest/5.Waits/    #增加等待事件
    try:
        input = wait.until(  # 等待搜索框元素加载出来
            EC.presence_of_element_located(
                (By.CSS_SELECTOR, "#schform>p>input"))
        )

        submit = wait.until(  # 获取搜索按钮
            EC.element_to_be_clickable((By.CSS_SELECTOR, '.sub'))
        )

        input.send_keys('4k')  # 输入4k
        submit.click()  # 点击搜索

        total = wait.until(  # 获取一共有多少页数
            EC.presence_of_element_located((By.CSS_SELECTOR, 'span.text'))
        )
        get_products()  #整个页面加载出来调用一次 获取页面方法
        return total.text
    except TimeoutException:  # 如果网速慢没有加载出来重新搜索
        return search()


def next_page(pagenum):
    print('当前页数'+pagenum)
    next_btn = wait.until(
        EC.presence_of_element_located(    #伪元素 选择器选择 a标签倒数第二个, 倒数选择的时候和a标签同级的标签也算位置 所以填5
            (By.CSS_SELECTOR, '.page >a:nth-last-child(5)'))
    )
    next_btn.click()  #点击下一页
    get_products()  #点击完下一页重新获取数据
    
def get_products():    
    html=driver.page_source #获取页面数据
    doc=pq(html)  #使用pyquery 解析数据
    items=doc('div.slist>ul>li').items()
    for item in items:      #获取数据
        product={
            'href':item.find('a').attr('href'),
            'minimg':item.find('img').attr('src'),
            'title':item.find('b').text()
        }
        # 
        # print(product)
        save_to_mongo(product)

def save_to_mongo(result):     #保存到mongo数据库 
    try:
        if db[MONGO_TABLE].insert(result):
            print('存储到MONGODB成功',result) 
    except Exception:
        print('存储到MONGODB失败',result)


def main():
    total = search()  # 返回一个 565页 到第 的文本  需要处理成只有数字的文本
    total = re.compile('(\d+)').search(total).group(1)
    print('总共有'+total+'页')
    for i in range(2,int(total)+1): 
        next_page(total)
    driver.close() #关闭浏览器

if __name__ == "__main__":
    main()
